function curring(fn,...args){
    function curred(){
        let allProps = [...args,...arguments]
       
        //返回 执行一下的curring  虽然最终还是返回 curred 但是 实现了当前的 allProps 变成了 下一次 的 args
        //实现参数拼接的关键代码
        return curring(fn,...allProps)
    }
    // curred.valueOf=function(){
    //    //返回原函数的执行结果
    //    return fn.call(this,...args)
    // }
    curred.toString=function(){
        //返回原函数的执行结果
        return fn.call(this,...args)
        
    }
   return curred 
}

let redAdd=(...args)=>{
    return args.reduce((r,p)=>{
        return r+p
    },0)
}

let add = curring(redAdd)
console.log(add(1)(2)(3));
